package com.zhss.eshop.inventory.command;

import com.zhss.eshop.common.util.DateProvider;
import com.zhss.eshop.inventory.domain.model.InventoryGoodsStock;
import com.zhss.eshop.inventory.mapper.InventoryGoodsStockMapper;
import com.zhss.eshop.wms.domain.dto.WmsPurchaseInputOrderItemDTO;

import java.util.List;
import java.util.Map;

/**
 * 采购入库库存更新命令
 *
 * @author suyuan
 */
public class PurchaseInputStockUpdater extends AbstractStockUpdater {

    /**
     * 采购入库单条目DTO集合
     */
    private Map<Long, WmsPurchaseInputOrderItemDTO> purcahseInputOrderItemDTOMap;

    /**
     * 构造函数
     *
     * @param goodsStockDOs  商品库存DO对象
     * @param goodsStockDAO 商品库存管理模块的DAO组件
     * @param dateProvider  日期辅助组件
     */
    public PurchaseInputStockUpdater(
            List<InventoryGoodsStock> goodsStockDOs,
            InventoryGoodsStockMapper goodsStockDAO,
            DateProvider dateProvider,
            Map<Long, WmsPurchaseInputOrderItemDTO> purcahseInputOrderItemDTOMap) {
        super(goodsStockDOs, goodsStockDAO, dateProvider);
        this.purcahseInputOrderItemDTOMap = purcahseInputOrderItemDTOMap;
    }

    /**
     * 更新销售库存
     */
    @Override
    protected void updateSaleStockQuantity() throws Exception {
        for (InventoryGoodsStock goodsStockDO : goodsStockDOs) {
            WmsPurchaseInputOrderItemDTO purchaseInputOrderItemDTO = purcahseInputOrderItemDTOMap.get(goodsStockDO.getGoodsSkuId());
            goodsStockDO.setSaleStockQuantity(goodsStockDO.getSaleStockQuantity()
                    + purchaseInputOrderItemDTO.getArrivalCount());
        }
    }

    /**
     * 更新锁定库存
     */
    @Override
    protected void updateLockedStockQuantity() throws Exception {

    }

    /**
     * 更新已销售库存
     */
    @Override
    protected void updateSaledStockQuantity() throws Exception {

    }

}
